/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import database.DBConnection;
import model.*;
import util.PropertiesManager;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;

/**
 *
 * @author Fellipe
 */

public class AtividadeDAO implements InterfaceDAO {

    private HashMap dados;
    
    public AtividadeDAO() throws IOException{
        
        dados = new PropertiesManager("sql.properties").readPropertiesFile();
        
    }    
    
    @Override
    public void inserir (Object obj) throws SQLException {
        Atividade atividades = (Atividade) obj;        
                     
        Connection conexao = DBConnection.getInstance();
        String sql = (String) dados.get("Insert.Atividade");
        PreparedStatement pstmt = conexao.prepareStatement(sql);
        pstmt.setString(1, atividades.getIdAtividade());
        pstmt.setString(2, atividades.getNomeAluno());
        pstmt.setString(3, atividades.getNomeCurso());
        pstmt.setString(4, atividades.getNomeProfessor());
        pstmt.setString(5, atividades.getStatus());
        pstmt.execute();
        pstmt.close();
    }

    @Override
    public void excluir(Object obj) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public String remover(String codati) throws SQLException {
        String retorno = "erro";                 
        
        Connection conexao = DBConnection.getInstance();
        try{
            String sql = (String) dados.get("Delete.Atividade");
            PreparedStatement pstmt = conexao.prepareStatement(sql);
            pstmt.executeQuery(codati);
            retorno = "sucesso";
            pstmt.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return retorno;
        
    }    

    @Override
    public ArrayList pesquisarTudo() throws SQLException {
      ArrayList ativList = new ArrayList();
      //return ativList;
      Connection conexao = DBConnection.getInstance();
      String sql = (String) dados.get("Atividade.Tudo");
      PreparedStatement pstmt = conexao.prepareStatement(sql);
      ResultSet rs = pstmt.executeQuery();
      
      while (rs.next()) {

          Atividade atividade = new Atividade(); 
          //atividade.setIdAtividade(rs.getString(1));
          atividade.setNomeAluno(rs.getString(1));
          atividade.setNomeCurso(rs.getString(2));
          atividade.setNomeProfessor(rs.getString(3));
          atividade.setHorasRequisitadas(rs.getInt(4));
          atividade.setHorasAceitas(rs.getInt(5));
          atividade.setDataRequisicao(rs.getDate(6));
          atividade.setDataAvaliacao(rs.getDate(7));
          atividade.setObservacao(rs.getString(8));
          ativList.add(atividade);
      }
       pstmt.close();
       return ativList;
    } 
    
    public Atividade pesquisarCod(String cod) throws SQLException {
      //ArrayList ativList = new ArrayList();
      Connection conexao = DBConnection.getInstance();
        Atividade ativ = null;
        String sql = (String) dados.get("SelectById.Atividade");
        PreparedStatement pstmt = conexao.prepareStatement(sql);
        pstmt.setString(1, cod);
        ResultSet rs = pstmt.executeQuery();
        if (rs.next()) {
            ativ = new Atividade(); 
            ativ.setIdAtividade(rs.getString(1));
            ativ.setNomeAluno(rs.getString(2));
            ativ.setNomeCurso(rs.getString(3));
            ativ.setNomeProfessor(rs.getString(4));
            ativ.setStatus(rs.getString(5));
        }
        pstmt.close();
        return ativ;
    }    

    @Override
    public Object pesquisarChave(int chave) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void editar(Object obj) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public String validar(Atividade atividade) throws SQLException {
        String retorno = "erro";                 
        
        int codaluno = 0;
        int codprof = 0;
        char stat[];
        String tipo = null;
        int horasReq = 0;
        
        Connection conexao = DBConnection.getInstance();
        
        Statement getKey = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
                        ResultSet.CONCUR_UPDATABLE);

        String query = "SELECT A.CODALUNO, P.CODPROFESSOR, OBSERVACAO " +
                        "FROM ALUNO A, PROFESSOR P, ATIVIDADECOMPLEMENTAR " +
                        "WHERE A.NOMEALUNO = '"+atividade.getNomeAluno()+"' AND P.NOMEPROFESSOR = '"+atividade.getNomeProfessor()+"'";

        ResultSet rs = getKey.executeQuery(query);

        if (rs != null && rs.next()) {
            codaluno = rs.getInt("CODALUNO");
            codprof = rs.getInt("CODPROFESSOR");
            tipo = rs.getString("OBSERVACAO");
            
    	} else {
    		System.out.println("ERRO na busca da chave estrangeira");
    	}
    	rs.close();
    	getKey.close();
       
        atividade.setObservacao(tipo);
        //atividade.setHorasRequisitadas(horasReq);
        try{
            CallableStatement pstmt = conexao.prepareCall("{call proc_analise(?, ?, ?, ?)}");
            pstmt.setString(1, atividade.getStatus());
            pstmt.setInt(2, atividade.getHorasAceitas());
            pstmt.setInt(3, codaluno);
            pstmt.setInt(4, codprof);
            //pstmt.setString(5, tipo);
            pstmt.executeUpdate();
            retorno = "sucesso";
            pstmt.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return retorno;
    }
    
    /*class atividadeDouble {
        public ArrayList getListAtividades() {
            ArrayList atividades = new ArrayList();
            Atividade atividade;
            atividade = new Atividade("00001", new Aluno("Johnny","0120"), new TipoAtividade("Estagio"), new Professor("Karen","0012",Area.INFORMATICA), "P");
            atividades.add(atividade);
            atividade = new Atividade("00002", new Aluno("Sheldon","0120"), new TipoAtividade("Pesquisa"), new Professor("Marcia","0012",Area.INFORMATICA), "P");
            atividades.add(atividade);
            atividade = new Atividade("00003", new Aluno("Leonard","0120"), new TipoAtividade("Congresso"), new Professor("Cesar","0012",Area.INFORMATICA), "P");
            atividades.add(atividade);
            return atividades;
        }
    }*/
    
    /*public Object listaEmAberto (Object obj) throws SQLException {
        
    }*/
}
